Adding some more judges, here and there.
[and.git] / lib / Mi manual de algoritmos / version_actual / src / grafos / ford_fulkerson.tex
blobeb7697a37f5d8219aae09b7a54797969a3447dcd
1 % Generator: GNU source-highlight, by Lorenzo Bettini, http://www.gnu.org/software/src-highlite
3 {\ttfamily \raggedright {
4 \noindent
5 \mbox{}\textit{\textcolor{Brown}{/*}} \\
6 \mbox{}\textit{\textcolor{Brown}{\ \ cap[i][j]\ =\ Capacidad\ de\ la\ arista\ (i,\ j).}} \\
7 \mbox{}\textit{\textcolor{Brown}{\ \ prev[i]\ =\ Predecesor\ del\ nodo\ i\ en\ un\ camino\ de\ aumentación.}} \\
8 \mbox{}\textit{\textcolor{Brown}{\ */}} \\
9 \mbox{}\textcolor{ForestGreen}{int}\ cap\textcolor{BrickRed}{[}MAXN\textcolor{BrickRed}{+}\textcolor{Purple}{1}\textcolor{BrickRed}{][}MAXN\textcolor{BrickRed}{+}\textcolor{Purple}{1}\textcolor{BrickRed}{],}\ prev\textcolor{BrickRed}{[}MAXN\textcolor{BrickRed}{+}\textcolor{Purple}{1}\textcolor{BrickRed}{];} \\
10 \mbox{} \\
11 \mbox{}vector\textcolor{BrickRed}{$<$}\textcolor{ForestGreen}{int}\textcolor{BrickRed}{$>$}\ g\textcolor{BrickRed}{[}MAXN\textcolor{BrickRed}{+}\textcolor{Purple}{1}\textcolor{BrickRed}{];}\ \textit{\textcolor{Brown}{//Vecinos\ de\ cada\ nodo.}} \\
12 \mbox{}\textbf{\textcolor{Blue}{inline}}\ \textcolor{ForestGreen}{void}\ \textbf{\textcolor{Black}{link}}\textcolor{BrickRed}{(}\textcolor{ForestGreen}{int}\ u\textcolor{BrickRed}{,}\ \textcolor{ForestGreen}{int}\ v\textcolor{BrickRed}{,}\ \textcolor{ForestGreen}{int}\ c\textcolor{BrickRed}{)}\textcolor{Red}{\{}\ cap\textcolor{BrickRed}{[}u\textcolor{BrickRed}{][}v\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{=}\ c\textcolor{BrickRed}{;}\ g\textcolor{BrickRed}{[}u\textcolor{BrickRed}{].}\textbf{\textcolor{Black}{push$\_$back}}\textcolor{BrickRed}{(}v\textcolor{BrickRed}{),}\ g\textcolor{BrickRed}{[}v\textcolor{BrickRed}{].}\textbf{\textcolor{Black}{push$\_$back}}\textcolor{BrickRed}{(}u\textcolor{BrickRed}{);}\ \textcolor{Red}{\}} \\
13 \mbox{}\textit{\textcolor{Brown}{/*}} \\
14 \mbox{}\textit{\textcolor{Brown}{\ \ Notar\ que\ link\ crea\ las\ aristas\ (u,\ v)\ \&\&\ (v,\ u)\ en\ el\ grafo\ g.\ Esto\ es\ necesario}} \\
15 \mbox{}\textit{\textcolor{Brown}{\ \ porque\ el\ algoritmo\ de\ Edmonds-Karp\ necesita\ mirar\ el\ "{}back-edge"{}\ (j,\ i)\ que\ se\ crea}} \\
16 \mbox{}\textit{\textcolor{Brown}{\ \ al\ bombear\ flujo\ a\ través\ de\ (i,\ j).\ Sin\ embargo,\ no\ modifica\ cap[v][u],\ porque\ se}} \\
17 \mbox{}\textit{\textcolor{Brown}{\ \ asume\ que\ el\ grafo\ es\ dirigido.\ Si\ es\ no-dirigido,\ hacer\ cap[u][v]\ =\ cap[v][u]\ =\ c.}} \\
18 \mbox{}\textit{\textcolor{Brown}{\ */}} \\
19 \mbox{} \\
20 \mbox{} \\
21 \mbox{}\textit{\textcolor{Brown}{/*}} \\
22 \mbox{}\textit{\textcolor{Brown}{\ \ Método\ 1:}} \\
23 \mbox{} \\
24 \mbox{}\textit{\textcolor{Brown}{\ \ Mantener\ la\ red\ residual,\ donde\ residual[i][j]\ =\ cuánto\ flujo\ extra\ puedo\ inyectar}} \\
25 \mbox{}\textit{\textcolor{Brown}{\ \ a\ través\ de\ la\ arista\ (i,\ j).}} \\
26 \mbox{} \\
27 \mbox{}\textit{\textcolor{Brown}{\ \ Si\ empujo\ k\ unidades\ de\ i\ a\ j,\ entonces\ residual[i][j]\ -=\ k\ y\ residual[j][i]\ +=\ k}} \\
28 \mbox{}\textit{\textcolor{Brown}{\ \ (Puedo\ "{}desempujar"{}\ las\ k\ unidades\ de\ j\ a\ i).}} \\
29 \mbox{} \\
30 \mbox{}\textit{\textcolor{Brown}{\ \ Se\ puede\ modificar\ para\ que\ no\ utilice\ extra\ memoria\ en\ la\ tabla\ residual,\ sino}} \\
31 \mbox{}\textit{\textcolor{Brown}{\ \ que\ modifique\ directamente\ la\ tabla\ cap.}} \\
32 \mbox{}\textit{\textcolor{Brown}{*/}} \\
33 \mbox{} \\
34 \mbox{}\textcolor{ForestGreen}{int}\ residual\textcolor{BrickRed}{[}MAXN\textcolor{BrickRed}{+}\textcolor{Purple}{1}\textcolor{BrickRed}{][}MAXN\textcolor{BrickRed}{+}\textcolor{Purple}{1}\textcolor{BrickRed}{];} \\
35 \mbox{}\textcolor{ForestGreen}{int}\ \textbf{\textcolor{Black}{fordFulkerson}}\textcolor{BrickRed}{(}\textcolor{ForestGreen}{int}\ n\textcolor{BrickRed}{,}\ \textcolor{ForestGreen}{int}\ s\textcolor{BrickRed}{,}\ \textcolor{ForestGreen}{int}\ t\textcolor{BrickRed}{)}\textcolor{Red}{\{} \\
36 \mbox{}\ \ \textbf{\textcolor{Black}{memcpy}}\textcolor{BrickRed}{(}residual\textcolor{BrickRed}{,}\ cap\textcolor{BrickRed}{,}\ \textbf{\textcolor{Blue}{sizeof}}\ cap\textcolor{BrickRed}{);} \\
37 \mbox{} \\
38 \mbox{}\ \ \textcolor{ForestGreen}{int}\ ans\ \textcolor{BrickRed}{=}\ \textcolor{Purple}{0}\textcolor{BrickRed}{;} \\
39 \mbox{}\ \ \textbf{\textcolor{Blue}{while}}\ \textcolor{BrickRed}{(}\textbf{\textcolor{Blue}{true}}\textcolor{BrickRed}{)}\textcolor{Red}{\{} \\
40 \mbox{}\ \ \ \ \textbf{\textcolor{Black}{fill}}\textcolor{BrickRed}{(}prev\textcolor{BrickRed}{,}\ prev\textcolor{BrickRed}{+}n\textcolor{BrickRed}{,}\ \textcolor{BrickRed}{-}\textcolor{Purple}{1}\textcolor{BrickRed}{);} \\
41 \mbox{}\ \ \ \ queue\textcolor{BrickRed}{$<$}\textcolor{ForestGreen}{int}\textcolor{BrickRed}{$>$}\ q\textcolor{BrickRed}{;} \\
42 \mbox{}\ \ \ \ q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{push}}\textcolor{BrickRed}{(}s\textcolor{BrickRed}{);} \\
43 \mbox{}\ \ \ \ \textbf{\textcolor{Blue}{while}}\ \textcolor{BrickRed}{(}q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{size}}\textcolor{BrickRed}{()}\ \textcolor{BrickRed}{\&\&}\ prev\textcolor{BrickRed}{[}t\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{==}\ \textcolor{BrickRed}{-}\textcolor{Purple}{1}\textcolor{BrickRed}{)}\textcolor{Red}{\{} \\
44 \mbox{}\ \ \ \ \ \ \textcolor{ForestGreen}{int}\ u\ \textcolor{BrickRed}{=}\ q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{front}}\textcolor{BrickRed}{();} \\
45 \mbox{}\ \ \ \ \ \ q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{pop}}\textcolor{BrickRed}{();} \\
46 \mbox{}\ \ \ \ \ \ vector\textcolor{BrickRed}{$<$}\textcolor{ForestGreen}{int}\textcolor{BrickRed}{$>$}\ \textcolor{BrickRed}{\&}out\ \textcolor{BrickRed}{=}\ g\textcolor{BrickRed}{[}u\textcolor{BrickRed}{];} \\
47 \mbox{}\ \ \ \ \ \ \textbf{\textcolor{Blue}{for}}\ \textcolor{BrickRed}{(}\textcolor{ForestGreen}{int}\ k\ \textcolor{BrickRed}{=}\ \textcolor{Purple}{0}\textcolor{BrickRed}{,}\ m\ \textcolor{BrickRed}{=}\ out\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{size}}\textcolor{BrickRed}{();}\ k\textcolor{BrickRed}{$<$}m\textcolor{BrickRed}{;}\ \textcolor{BrickRed}{++}k\textcolor{BrickRed}{)}\textcolor{Red}{\{} \\
48 \mbox{}\ \ \ \ \ \ \ \ \textcolor{ForestGreen}{int}\ v\ \textcolor{BrickRed}{=}\ out\textcolor{BrickRed}{[}k\textcolor{BrickRed}{];} \\
49 \mbox{}\ \ \ \ \ \ \ \ \textbf{\textcolor{Blue}{if}}\ \textcolor{BrickRed}{(}v\ \textcolor{BrickRed}{!=}\ s\ \textcolor{BrickRed}{\&\&}\ prev\textcolor{BrickRed}{[}v\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{==}\ \textcolor{BrickRed}{-}\textcolor{Purple}{1}\ \textcolor{BrickRed}{\&\&}\ residual\textcolor{BrickRed}{[}u\textcolor{BrickRed}{][}v\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{$>$}\ \textcolor{Purple}{0}\textcolor{BrickRed}{)} \\
50 \mbox{}\ \ \ \ \ \ \ \ \ \ prev\textcolor{BrickRed}{[}v\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{=}\ u\textcolor{BrickRed}{,}\ q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{push}}\textcolor{BrickRed}{(}v\textcolor{BrickRed}{);} \\
51 \mbox{}\ \ \ \ \ \ \textcolor{Red}{\}} \\
52 \mbox{}\ \ \ \ \textcolor{Red}{\}} \\
53 \mbox{} \\
54 \mbox{}\ \ \ \ \textbf{\textcolor{Blue}{if}}\ \textcolor{BrickRed}{(}prev\textcolor{BrickRed}{[}t\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{==}\ \textcolor{BrickRed}{-}\textcolor{Purple}{1}\textcolor{BrickRed}{)}\ \textbf{\textcolor{Blue}{break}}\textcolor{BrickRed}{;} \\
55 \mbox{} \\
56 \mbox{}\ \ \ \ \textcolor{ForestGreen}{int}\ bottleneck\ \textcolor{BrickRed}{=}\ INT$\_$MAX\textcolor{BrickRed}{;} \\
57 \mbox{}\ \ \ \ \textbf{\textcolor{Blue}{for}}\ \textcolor{BrickRed}{(}\textcolor{ForestGreen}{int}\ v\ \textcolor{BrickRed}{=}\ t\textcolor{BrickRed}{,}\ u\ \textcolor{BrickRed}{=}\ prev\textcolor{BrickRed}{[}v\textcolor{BrickRed}{];}\ u\ \textcolor{BrickRed}{!=}\ \textcolor{BrickRed}{-}\textcolor{Purple}{1}\textcolor{BrickRed}{;}\ v\ \textcolor{BrickRed}{=}\ u\textcolor{BrickRed}{,}\ u\ \textcolor{BrickRed}{=}\ prev\textcolor{BrickRed}{[}v\textcolor{BrickRed}{])}\textcolor{Red}{\{} \\
58 \mbox{}\ \ \ \ \ \ bottleneck\ \textcolor{BrickRed}{=}\ \textbf{\textcolor{Black}{min}}\textcolor{BrickRed}{(}bottleneck\textcolor{BrickRed}{,}\ residual\textcolor{BrickRed}{[}u\textcolor{BrickRed}{][}v\textcolor{BrickRed}{]);} \\
59 \mbox{}\ \ \ \ \textcolor{Red}{\}} \\
60 \mbox{}\ \ \ \ \textbf{\textcolor{Blue}{for}}\ \textcolor{BrickRed}{(}\textcolor{ForestGreen}{int}\ v\ \textcolor{BrickRed}{=}\ t\textcolor{BrickRed}{,}\ u\ \textcolor{BrickRed}{=}\ prev\textcolor{BrickRed}{[}v\textcolor{BrickRed}{];}\ u\ \textcolor{BrickRed}{!=}\ \textcolor{BrickRed}{-}\textcolor{Purple}{1}\textcolor{BrickRed}{;}\ v\ \textcolor{BrickRed}{=}\ u\textcolor{BrickRed}{,}\ u\ \textcolor{BrickRed}{=}\ prev\textcolor{BrickRed}{[}v\textcolor{BrickRed}{])}\textcolor{Red}{\{} \\
61 \mbox{}\ \ \ \ \ \ residual\textcolor{BrickRed}{[}u\textcolor{BrickRed}{][}v\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{-=}\ bottleneck\textcolor{BrickRed}{;} \\
62 \mbox{}\ \ \ \ \ \ residual\textcolor{BrickRed}{[}v\textcolor{BrickRed}{][}u\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{+=}\ bottleneck\textcolor{BrickRed}{;} \\
63 \mbox{}\ \ \ \ \textcolor{Red}{\}} \\
64 \mbox{}\ \ \ \ ans\ \textcolor{BrickRed}{+=}\ bottleneck\textcolor{BrickRed}{;} \\
65 \mbox{}\ \ \textcolor{Red}{\}} \\
66 \mbox{}\ \ \textbf{\textcolor{Blue}{return}}\ ans\textcolor{BrickRed}{;} \\
67 \mbox{}\textcolor{Red}{\}} \\
68 \mbox{} \\
69 \mbox{} \\
70 \mbox{} \\
71 \mbox{}\textit{\textcolor{Brown}{/*}} \\
72 \mbox{}\textit{\textcolor{Brown}{\ \ Método\ 2:}} \\
73 \mbox{} \\
74 \mbox{}\textit{\textcolor{Brown}{\ \ Mantener\ la\ red\ de\ flujos,\ donde\ flow[i][j]\ =\ Flujo\ que,\ err,\ fluye}} \\
75 \mbox{}\textit{\textcolor{Brown}{\ \ de\ i\ a\ j.\ Notar\ que\ flow[i][j]\ puede\ ser\ negativo.\ Si\ esto\ pasa,}} \\
76 \mbox{}\textit{\textcolor{Brown}{\ \ es\ lo\ equivalente\ a\ decir\ que\ i\ "{}absorve"{}\ flujo\ de\ j,\ o\ lo\ que\ es}} \\
77 \mbox{}\textit{\textcolor{Brown}{\ \ lo\ mismo,\ que\ hay\ flujo\ positivo\ de\ j\ a\ i.}} \\
78 \mbox{} \\
79 \mbox{}\textit{\textcolor{Brown}{\ \ En\ cualquier\ momento\ se\ cumple\ la\ propiedad\ de\ skew\ symmetry,\ es\ decir,}} \\
80 \mbox{}\textit{\textcolor{Brown}{\ \ flow[i][j]\ =\ -flow[j][i].\ El\ flujo\ neto\ de\ i\ a\ j\ es\ entonces\ flow[i][j].}} \\
81 \mbox{} \\
82 \mbox{}\textit{\textcolor{Brown}{*/}} \\
83 \mbox{} \\
84 \mbox{}\textcolor{ForestGreen}{int}\ flow\textcolor{BrickRed}{[}MAXN\textcolor{BrickRed}{+}\textcolor{Purple}{1}\textcolor{BrickRed}{][}MAXN\textcolor{BrickRed}{+}\textcolor{Purple}{1}\textcolor{BrickRed}{];} \\
85 \mbox{}\textcolor{ForestGreen}{int}\ \textbf{\textcolor{Black}{fordFulkerson}}\textcolor{BrickRed}{(}\textcolor{ForestGreen}{int}\ n\textcolor{BrickRed}{,}\ \textcolor{ForestGreen}{int}\ s\textcolor{BrickRed}{,}\ \textcolor{ForestGreen}{int}\ t\textcolor{BrickRed}{)}\textcolor{Red}{\{} \\
86 \mbox{}\ \ \textit{\textcolor{Brown}{//memset(flow,\ 0,\ sizeof\ flow);}} \\
87 \mbox{}\ \ \textbf{\textcolor{Blue}{for}}\ \textcolor{BrickRed}{(}\textcolor{ForestGreen}{int}\ i\textcolor{BrickRed}{=}\textcolor{Purple}{0}\textcolor{BrickRed}{;}\ i\textcolor{BrickRed}{$<$}n\textcolor{BrickRed}{;}\ \textcolor{BrickRed}{++}i\textcolor{BrickRed}{)}\ \textbf{\textcolor{Black}{fill}}\textcolor{BrickRed}{(}flow\textcolor{BrickRed}{[}i\textcolor{BrickRed}{],}\ flow\textcolor{BrickRed}{[}i\textcolor{BrickRed}{]+}n\textcolor{BrickRed}{,}\ \textcolor{Purple}{0}\textcolor{BrickRed}{);} \\
88 \mbox{}\ \ \textcolor{ForestGreen}{int}\ ans\ \textcolor{BrickRed}{=}\ \textcolor{Purple}{0}\textcolor{BrickRed}{;} \\
89 \mbox{}\ \ \textbf{\textcolor{Blue}{while}}\ \textcolor{BrickRed}{(}\textbf{\textcolor{Blue}{true}}\textcolor{BrickRed}{)}\textcolor{Red}{\{} \\
90 \mbox{}\ \ \ \ \textbf{\textcolor{Black}{fill}}\textcolor{BrickRed}{(}prev\textcolor{BrickRed}{,}\ prev\textcolor{BrickRed}{+}n\textcolor{BrickRed}{,}\ \textcolor{BrickRed}{-}\textcolor{Purple}{1}\textcolor{BrickRed}{);} \\
91 \mbox{}\ \ \ \ queue\textcolor{BrickRed}{$<$}\textcolor{ForestGreen}{int}\textcolor{BrickRed}{$>$}\ q\textcolor{BrickRed}{;} \\
92 \mbox{}\ \ \ \ q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{push}}\textcolor{BrickRed}{(}s\textcolor{BrickRed}{);} \\
93 \mbox{}\ \ \ \ \textbf{\textcolor{Blue}{while}}\ \textcolor{BrickRed}{(}q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{size}}\textcolor{BrickRed}{()}\ \textcolor{BrickRed}{\&\&}\ prev\textcolor{BrickRed}{[}t\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{==}\ \textcolor{BrickRed}{-}\textcolor{Purple}{1}\textcolor{BrickRed}{)}\textcolor{Red}{\{} \\
94 \mbox{}\ \ \ \ \ \ \textcolor{ForestGreen}{int}\ u\ \textcolor{BrickRed}{=}\ q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{front}}\textcolor{BrickRed}{();} \\
95 \mbox{}\ \ \ \ \ \ q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{pop}}\textcolor{BrickRed}{();} \\
96 \mbox{}\ \ \ \ \ \ vector\textcolor{BrickRed}{$<$}\textcolor{ForestGreen}{int}\textcolor{BrickRed}{$>$}\ \textcolor{BrickRed}{\&}out\ \textcolor{BrickRed}{=}\ g\textcolor{BrickRed}{[}u\textcolor{BrickRed}{];} \\
97 \mbox{}\ \ \ \ \ \ \textbf{\textcolor{Blue}{for}}\ \textcolor{BrickRed}{(}\textcolor{ForestGreen}{int}\ k\ \textcolor{BrickRed}{=}\ \textcolor{Purple}{0}\textcolor{BrickRed}{,}\ m\ \textcolor{BrickRed}{=}\ out\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{size}}\textcolor{BrickRed}{();}\ k\textcolor{BrickRed}{$<$}m\textcolor{BrickRed}{;}\ \textcolor{BrickRed}{++}k\textcolor{BrickRed}{)}\textcolor{Red}{\{} \\
98 \mbox{}\ \ \ \ \ \ \ \ \textcolor{ForestGreen}{int}\ v\ \textcolor{BrickRed}{=}\ out\textcolor{BrickRed}{[}k\textcolor{BrickRed}{];} \\
99 \mbox{}\ \ \ \ \ \ \ \ \textbf{\textcolor{Blue}{if}}\ \textcolor{BrickRed}{(}v\ \textcolor{BrickRed}{!=}\ s\ \textcolor{BrickRed}{\&\&}\ prev\textcolor{BrickRed}{[}v\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{==}\ \textcolor{BrickRed}{-}\textcolor{Purple}{1}\ \textcolor{BrickRed}{\&\&}\ cap\textcolor{BrickRed}{[}u\textcolor{BrickRed}{][}v\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{$>$}\ flow\textcolor{BrickRed}{[}u\textcolor{BrickRed}{][}v\textcolor{BrickRed}{])} \\
100 \mbox{}\ \ \ \ \ \ \ \ \ \ prev\textcolor{BrickRed}{[}v\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{=}\ u\textcolor{BrickRed}{,}\ q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{push}}\textcolor{BrickRed}{(}v\textcolor{BrickRed}{);} \\
101 \mbox{}\ \ \ \ \ \ \textcolor{Red}{\}} \\
102 \mbox{}\ \ \ \ \textcolor{Red}{\}} \\
103 \mbox{} \\
104 \mbox{}\ \ \ \ \textbf{\textcolor{Blue}{if}}\ \textcolor{BrickRed}{(}prev\textcolor{BrickRed}{[}t\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{==}\ \textcolor{BrickRed}{-}\textcolor{Purple}{1}\textcolor{BrickRed}{)}\ \textbf{\textcolor{Blue}{break}}\textcolor{BrickRed}{;} \\
105 \mbox{} \\
106 \mbox{}\ \ \ \ \textcolor{ForestGreen}{int}\ bottleneck\ \textcolor{BrickRed}{=}\ INT$\_$MAX\textcolor{BrickRed}{;} \\
107 \mbox{}\ \ \ \ \textbf{\textcolor{Blue}{for}}\ \textcolor{BrickRed}{(}\textcolor{ForestGreen}{int}\ v\ \textcolor{BrickRed}{=}\ t\textcolor{BrickRed}{,}\ u\ \textcolor{BrickRed}{=}\ prev\textcolor{BrickRed}{[}v\textcolor{BrickRed}{];}\ u\ \textcolor{BrickRed}{!=}\ \textcolor{BrickRed}{-}\textcolor{Purple}{1}\textcolor{BrickRed}{;}\ v\ \textcolor{BrickRed}{=}\ u\textcolor{BrickRed}{,}\ u\ \textcolor{BrickRed}{=}\ prev\textcolor{BrickRed}{[}v\textcolor{BrickRed}{])}\textcolor{Red}{\{} \\
108 \mbox{}\ \ \ \ \ \ bottleneck\ \textcolor{BrickRed}{=}\ \textbf{\textcolor{Black}{min}}\textcolor{BrickRed}{(}bottleneck\textcolor{BrickRed}{,}\ cap\textcolor{BrickRed}{[}u\textcolor{BrickRed}{][}v\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{-}\ flow\textcolor{BrickRed}{[}u\textcolor{BrickRed}{][}v\textcolor{BrickRed}{]);} \\
109 \mbox{}\ \ \ \ \textcolor{Red}{\}} \\
110 \mbox{}\ \ \ \ \textbf{\textcolor{Blue}{for}}\ \textcolor{BrickRed}{(}\textcolor{ForestGreen}{int}\ v\ \textcolor{BrickRed}{=}\ t\textcolor{BrickRed}{,}\ u\ \textcolor{BrickRed}{=}\ prev\textcolor{BrickRed}{[}v\textcolor{BrickRed}{];}\ u\ \textcolor{BrickRed}{!=}\ \textcolor{BrickRed}{-}\textcolor{Purple}{1}\textcolor{BrickRed}{;}\ v\ \textcolor{BrickRed}{=}\ u\textcolor{BrickRed}{,}\ u\ \textcolor{BrickRed}{=}\ prev\textcolor{BrickRed}{[}v\textcolor{BrickRed}{])}\textcolor{Red}{\{} \\
111 \mbox{}\ \ \ \ \ \ flow\textcolor{BrickRed}{[}u\textcolor{BrickRed}{][}v\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{+=}\ bottleneck\textcolor{BrickRed}{;} \\
112 \mbox{}\ \ \ \ \ \ flow\textcolor{BrickRed}{[}v\textcolor{BrickRed}{][}u\textcolor{BrickRed}{]}\ \textcolor{BrickRed}{=}\ \textcolor{BrickRed}{-}flow\textcolor{BrickRed}{[}u\textcolor{BrickRed}{][}v\textcolor{BrickRed}{];} \\
113 \mbox{}\ \ \ \ \textcolor{Red}{\}} \\
114 \mbox{}\ \ \ \ ans\ \textcolor{BrickRed}{+=}\ bottleneck\textcolor{BrickRed}{;} \\
115 \mbox{}\ \ \textcolor{Red}{\}} \\
116 \mbox{}\ \ \textbf{\textcolor{Blue}{return}}\ ans\textcolor{BrickRed}{;} \\
117 \mbox{}\textcolor{Red}{\}} \\
118 \mbox{} \\
120 } \normalfont\normalsize